package com.mkx.annotation;


import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedisLock {

    /**
     * 锁的key，支持SpEL表达式
     */
    String key();

    /**
     * 锁类型枚举
     */
    enum LockType {
        REENTRANT, FAIR, READ, WRITE, MULTI
    }

    /**
     * 锁类型
     */
    LockType type() default LockType.REENTRANT;

    /**
     * 等待时间，默认5秒
     */
    long waitTime() default 5000;

    /**
     * 超时时间，默认30秒
     */
    long expireTime() default 30000;

    /**
     * 时间单位，默认毫秒
     */
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;

    /**
     * 获取锁失败时的错误信息
     */
    String errorMessage() default "获取分布式锁失败";
}